#include "PeripheralModel.h"

#include <QFont>

PeripheralModel::PeripheralModel(QObject *parent)
    : QAbstractItemModel(parent)
    , m_current(nullptr)
{

}

//测试用例QMap<QString, QStringList*>*
// QMap<QString,QStringList*> PeripheralModel::GetJsonData(QMap<QString,QStringList*>* a)
// {
//     QMap<QString,QStringList*> b;
//     b = a;
//     return b;
// }

QMap<QString, QStringList> PeripheralModel::GetJsonData(QMap<QString, QStringList*>* a)
{
    // 创建一个新的 QMap，用于存储拷贝的数据
    QMap<QString, QStringList> b;

    // 检查传入的指针是否为空
    if (!a) {
        qDebug() << "Input map is null!";
        return b;  // 如果为空，直接返回空的 QMap
    }

    // 遍历输入的 QMap 指针对象
    for (auto it = a->begin(); it != a->end(); ++it) {
        QString key = it.key();  // 获取键
        QStringList* peripheralList = it.value();  // 获取外设列表指针

        if (peripheralList) {
            // 如果外设列表不为空，将其拷贝到新的 QMap 中
            b[key] = *peripheralList;
        } else {
            // 如果外设列表为空，插入一个空的 QStringList
            b[key] = QStringList();
        }
    }

    // 返回新的 QMap
    return b;
}


QVariant PeripheralModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if ((orientation != Qt::Horizontal) || (role != Qt::DisplayRole))
        return QVariant();
    if (section == 0)
        return "Object";
    else if (section == 1)
        return "Class";
    return QVariant();
}

QModelIndex PeripheralModel::index(int row, int column, const QModelIndex &parent) const
{
    // if (!hasIndex(row, column, parent))
    //     return QModelIndex();

    // if (parent.isValid()) {
    //     const Widget *p = static_cast<const Widget*>(parent.internalPointer());
    //     return createIndex(row, column, p->childs().at(row));
    // }
    // return createIndex(row, column, lvglObjects.topLevelObjects().at(row));
    return QModelIndex();
}

QModelIndex PeripheralModel::parent(const QModelIndex &index) const
{
    // if (!index.isValid())
    //     return QModelIndex();

    // Widget *o = static_cast<Widget*>(index.internalPointer());
    // Widget *p = o->o_parent();

    // if (p == nullptr)
    //     return QModelIndex();

    // const int row = p->childs().indexOf(o);
    // return createIndex(row, 0, p);
    return QModelIndex();
}

int PeripheralModel::rowCount(const QModelIndex &parent) const
{
    // if (parent.isValid()) {
    //     const Widget *p = static_cast<const Widget*>(parent.internalPointer());
    //     const int size = p->childs().size();
    //     return size;
    // }
    // auto top = lvglObjects.topLevelObjects();
    // const int size = top.size();
    // return size;
    return 2;
}

int PeripheralModel::columnCount(const QModelIndex &parent) const
{
    //Q_UNUSED(parent)
    return 2;
}

QVariant PeripheralModel::data(const QModelIndex &index, int role) const
{
    // if (!index.isValid())
    //     return QVariant();

    // const Widget *o = reinterpret_cast<const Widget*>(index.internalPointer());

    // if (role == Qt::DisplayRole) {
    //     if (index.column() == 0){
    //         return o->o_name();
    // } else if (index.column() == 1) {
    //     return o->className();
    // }
    // } else if (role == Qt::FontRole) {
    //     QFont font;
    //     font.setBold(m_current == o);
    //     return font;
    // }
    return QVariant();
}

void PeripheralModel::beginInsertObject(Widget *obj)
{
    // int row = 0;
    // Widget *p = obj->o_parent();
    // QModelIndex parent;
    // if (p) {
    //     row = p->childs().indexOf(obj);
    //     parent = objIndex(p, 0);
    // }
    // beginInsertRows(parent, row, row);
}

void PeripheralModel::endInsertObject()
{
    // endInsertRows();
}

void PeripheralModel::beginRemoveObject(Widget *obj)
{
    // int row = 0;
    // Widget *p = obj->o_parent();
    // QModelIndex parent;
    // if (p) {
    //     row = p->childs().indexOf(obj);
    //     parent = objIndex(p, 0);
    // }
    // beginRemzoveRows(parent, row, row);
}

void PeripheralModel::endRemoveObject()
{
    // endRemoveRows();
}

Widget *PeripheralModel::object(const QModelIndex &index) const
{
    // if (index.isValid())
    //     return reinterpret_cast<Widget*>(index.internalPointer());
    return nullptr;
}

void PeripheralModel::setCurrentObject(Widget *obj)
{
    // Widget *old = m_current;
    // m_current = obj;
    // emit dataChanged(objIndex(obj, 0), objIndex(obj, 1), QVector<int>({Qt::FontRole}));
    // emit dataChanged(objIndex(old, 0), objIndex(old, 1), QVector<int>({Qt::FontRole}));
}

QModelIndex PeripheralModel::objIndex(Widget *obj, int col) const
{
    // if (obj == nullptr)
    //     return QModelIndex();

    // Widget *p = obj->o_parent();
    // if (p) return createIndex(p->childs().indexOf(obj), col, obj);
    // return createIndex(lvglObjects.topLevelObjects().indexOf(obj), col, obj);
    return QModelIndex();
}
